<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>DefaultStackIterator.swift - Slather</title>
<link href="slather.css" media="all" rel="stylesheet">
</head>
<body>
<header><div class="row"><a href="index.html"><img src="logo.jpg" alt="Slather logo"></a></div></header><div class="row"><div id="reports">
<h2 class="cov_title">
<span>Coverage for "DefaultStackIterator.swift" : </span><span class="cov_medium">81.82%</span>
</h2>
<h4 class="cov_subtitle">(27 of 33 relevant lines covered)</h4>
<h4 class="cov_filepath">RouteComposer/Classes/Finders/Stack Iterator/DefaultStackIterator.swift</h4>
<table class="source_code">
<tr class="never">
<td class="num">1</td>
<td class="src"><pre><code class="objc">//</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">2</td>
<td class="src"><pre><code class="objc">// RouteComposer</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">3</td>
<td class="src"><pre><code class="objc">// DefaultStackIterator.swift</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">4</td>
<td class="src"><pre><code class="objc">// https://github.com/ekazaev/route-composer</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">5</td>
<td class="src"><pre><code class="objc">//</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">6</td>
<td class="src"><pre><code class="objc">// Created by Eugene Kazaev in 2018-2022.</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">7</td>
<td class="src"><pre><code class="objc">// Distributed under the MIT license.</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">8</td>
<td class="src"><pre><code class="objc">//</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">9</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">10</td>
<td class="src"><pre><code class="objc">import Foundation</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">11</td>
<td class="src"><pre><code class="objc">import UIKit</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">12</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">13</td>
<td class="src"><pre><code class="objc">/// Default implementation of `StackIterator` protocol</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">14</td>
<td class="src"><pre><code class="objc">public struct DefaultStackIterator: StackIterator {</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">15</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">16</td>
<td class="src"><pre><code class="objc">    // MARK: Internal entities</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">17</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">18</td>
<td class="src"><pre><code class="objc">    /// A starting point in the `UIViewController`s stack</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">19</td>
<td class="src"><pre><code class="objc">    ///</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">20</td>
<td class="src"><pre><code class="objc">    /// - topMost: Start from the topmost `UIViewController`</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">21</td>
<td class="src"><pre><code class="objc">    /// - root: Start from the `UIWindow`s root `UIViewController`</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">22</td>
<td class="src"><pre><code class="objc">    /// - custom: Start from the custom `UIViewController`</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">23</td>
<td class="src"><pre><code class="objc">    public enum StartingPoint {</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">24</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">25</td>
<td class="src"><pre><code class="objc">        /// Start from the topmost `UIViewController`</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">26</td>
<td class="src"><pre><code class="objc">        case topmost</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">27</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">28</td>
<td class="src"><pre><code class="objc">        /// Start from the `UIWindow`s root `UIViewController`</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">29</td>
<td class="src"><pre><code class="objc">        case root</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">30</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">31</td>
<td class="src"><pre><code class="objc">        /// Start from the custom `UIViewController`</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">32</td>
<td class="src"><pre><code class="objc">        case custom(@autoclosure () throws -&gt; UIViewController?)</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">33</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">34</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">35</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">36</td>
<td class="src"><pre><code class="objc">    // MARK: Properties</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">37</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">38</td>
<td class="src"><pre><code class="objc">    /// `SearchOptions` to be used by `StackIteratingFinder`</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">39</td>
<td class="src"><pre><code class="objc">    public let options: SearchOptions</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">40</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">41</td>
<td class="src"><pre><code class="objc">    /// A starting point in the `UIViewController`s stack</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">42</td>
<td class="src"><pre><code class="objc">    public let startingPoint: StartingPoint</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">43</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">44</td>
<td class="src"><pre><code class="objc">    /// `WindowProvider` to get proper `UIWindow`</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">45</td>
<td class="src"><pre><code class="objc">    public let windowProvider: WindowProvider</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">46</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">47</td>
<td class="src"><pre><code class="objc">    /// `ContainerAdapter` instance.</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">48</td>
<td class="src"><pre><code class="objc">    public let containerAdapterLocator: ContainerAdapterLocator</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">49</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">50</td>
<td class="src"><pre><code class="objc">    // MARK: Methods</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">51</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">52</td>
<td class="src"><pre><code class="objc">    /// Constructor</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">53</td>
<td class="src"><pre><code class="objc">    public init(options: SearchOptions = .fullStack,</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">54</td>
<td class="src"><pre><code class="objc">                startingPoint: StartingPoint = .topmost,</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">55</td>
<td class="src"><pre><code class="objc">                windowProvider: WindowProvider,</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">56</td>
<td class="src"><pre><code class="objc">                containerAdapterLocator: ContainerAdapterLocator) {</code></pre></td>
<td class="coverage">113x</td>
</tr>
<tr class="covered">
<td class="num">57</td>
<td class="src"><pre><code class="objc">        self.startingPoint = startingPoint</code></pre></td>
<td class="coverage">113x</td>
</tr>
<tr class="covered">
<td class="num">58</td>
<td class="src"><pre><code class="objc">        self.options = options</code></pre></td>
<td class="coverage">113x</td>
</tr>
<tr class="covered">
<td class="num">59</td>
<td class="src"><pre><code class="objc">        self.windowProvider = windowProvider</code></pre></td>
<td class="coverage">113x</td>
</tr>
<tr class="covered">
<td class="num">60</td>
<td class="src"><pre><code class="objc">        self.containerAdapterLocator = containerAdapterLocator</code></pre></td>
<td class="coverage">113x</td>
</tr>
<tr class="covered">
<td class="num">61</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">113x</td>
</tr>
<tr class="never">
<td class="num">62</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">63</td>
<td class="src"><pre><code class="objc">    /// Deprecated Constructor.</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">64</td>
<td class="src"><pre><code class="objc">    /// May create a conflict with default configuration. Please use `DefaultStackIterator.init(options:startingPoint:windowProvider:containerAdapterLocator:)`.</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">65</td>
<td class="src"><pre><code class="objc">    @available(*, deprecated, message: "May create a conflict with default configuration. Please use init(options:startingPoint:windowProvider:containerAdapterLocator:)")</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">66</td>
<td class="src"><pre><code class="objc">    public init(options: SearchOptions = .fullStack,</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="missed">
<td class="num">67</td>
<td class="src"><pre><code class="objc">                startingPoint: StartingPoint = .topmost) {</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="missed">
<td class="num">68</td>
<td class="src"><pre><code class="objc">        self.startingPoint = startingPoint</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="missed">
<td class="num">69</td>
<td class="src"><pre><code class="objc">        self.options = options</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="missed">
<td class="num">70</td>
<td class="src"><pre><code class="objc">        self.windowProvider = RouteComposerDefaults.shared.windowProvider</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="missed">
<td class="num">71</td>
<td class="src"><pre><code class="objc">        self.containerAdapterLocator = RouteComposerDefaults.shared.containerAdapterLocator</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="missed">
<td class="num">72</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="never">
<td class="num">73</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">74</td>
<td class="src"><pre><code class="objc">    /// Returns `UIViewController` instance if found</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">75</td>
<td class="src"><pre><code class="objc">    ///</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">76</td>
<td class="src"><pre><code class="objc">    /// - Parameter predicate: A block that contains `UIViewController` matching condition</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">77</td>
<td class="src"><pre><code class="objc">    public func firstViewController(where predicate: (UIViewController) -&gt; Bool) throws -&gt; UIViewController? {</code></pre></td>
<td class="coverage">193x</td>
</tr>
<tr class="covered">
<td class="num">78</td>
<td class="src"><pre><code class="objc">        guard let rootViewController = try getStartingViewController(),</code></pre></td>
<td class="coverage">193x</td>
</tr>
<tr class="covered">
<td class="num">79</td>
<td class="src"><pre><code class="objc">              let viewController = try UIViewController.findViewController(in: rootViewController,</code></pre></td>
<td class="coverage">193x</td>
</tr>
<tr class="covered">
<td class="num">80</td>
<td class="src"><pre><code class="objc">                                                                           options: options,</code></pre></td>
<td class="coverage">193x</td>
</tr>
<tr class="covered">
<td class="num">81</td>
<td class="src"><pre><code class="objc">                                                                           containerAdapterLocator: containerAdapterLocator,</code></pre></td>
<td class="coverage">193x</td>
</tr>
<tr class="covered">
<td class="num">82</td>
<td class="src"><pre><code class="objc">                                                                           using: predicate) else {</code></pre></td>
<td class="coverage">193x</td>
</tr>
<tr class="covered">
<td class="num">83</td>
<td class="src"><pre><code class="objc">            return nil</code></pre></td>
<td class="coverage">96x</td>
</tr>
<tr class="covered">
<td class="num">84</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage">97x</td>
</tr>
<tr class="covered">
<td class="num">85</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage">97x</td>
</tr>
<tr class="covered">
<td class="num">86</td>
<td class="src"><pre><code class="objc">        return viewController</code></pre></td>
<td class="coverage">97x</td>
</tr>
<tr class="covered">
<td class="num">87</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">193x</td>
</tr>
<tr class="never">
<td class="num">88</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">89</td>
<td class="src"><pre><code class="objc">    func getStartingViewController() throws -&gt; UIViewController? {</code></pre></td>
<td class="coverage">197x</td>
</tr>
<tr class="covered">
<td class="num">90</td>
<td class="src"><pre><code class="objc">        switch startingPoint {</code></pre></td>
<td class="coverage">197x</td>
</tr>
<tr class="covered">
<td class="num">91</td>
<td class="src"><pre><code class="objc">        case .topmost:</code></pre></td>
<td class="coverage">197x</td>
</tr>
<tr class="covered">
<td class="num">92</td>
<td class="src"><pre><code class="objc">            return windowProvider.window?.topmostViewController</code></pre></td>
<td class="coverage">165x</td>
</tr>
<tr class="covered">
<td class="num">93</td>
<td class="src"><pre><code class="objc">        case .root:</code></pre></td>
<td class="coverage">197x</td>
</tr>
<tr class="covered">
<td class="num">94</td>
<td class="src"><pre><code class="objc">            return windowProvider.window?.rootViewController</code></pre></td>
<td class="coverage">21x</td>
</tr>
<tr class="covered">
<td class="num">95</td>
<td class="src"><pre><code class="objc">        case let .custom(viewControllerClosure):</code></pre></td>
<td class="coverage">197x</td>
</tr>
<tr class="covered">
<td class="num">96</td>
<td class="src"><pre><code class="objc">            return try viewControllerClosure()</code></pre></td>
<td class="coverage">11x</td>
</tr>
<tr class="covered">
<td class="num">97</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage">197x</td>
</tr>
<tr class="covered">
<td class="num">98</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">197x</td>
</tr>
<tr class="never">
<td class="num">99</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">100</td>
<td class="src"><pre><code class="objc">}</code></pre></td>
<td class="coverage"></td>
</tr>
</table>
</div></div>
<footer><div class="row">
<p><a href="https://github.com/SlatherOrg/slather">Fork me on Github</a></p>
<p>&copy; 2022 Slather</p>
</div></footer><script src="highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script>
</body>
</html>
